#include <stdlib.h>
#include<stdio.h>

#define InitSize 10
#define ElemType int

typedef struct {
	ElemType *data;		//指示动态分配数组的指针
	int MaxSize;	//顺序表的最大容量
	int length;		//顺序表的当前容量
}SeqList;

//动态申请空间初始化
void InitList(SeqList *L) {
	L->data = (ElemType*)malloc(InitSize*sizeof(ElemType));	//用malloc在堆里申请一片连续的存储空间
	L->MaxSize = InitSize;
	L->length = 0;
}

//查找数组第i位的数据(按位查找)
ElemType GetElem(SeqList L,int i) {
	return L.data[i-1];
}

//按值查找(找和e的值一样的数),查到就返回所在位置
ElemType LocatedElem(SeqList L,ElemType e) {
	for (int i = 0;i<L.length;i++) {
		if (L.data[i] == e) {
			return i+1;
		}
	}
	return -1;
}

bool ListInsert(SeqList *L,int i,int e) {	//在L的位序i(第i个数,从1开始,而不是下标)处插入元素e
	if (i<1 || i>L->length+1) {		//判断i插入的位置是否有效
		return false;
	}
	if (L->length >= L->MaxSize) {		//当存储空间已满时,不能插入
		return false;
	}
	for (int j = L->length; j >= i; j--) {		//将第i个元素及之后的元素后移
		L->data[j] = L->data[j-1];
	}
	L->data[i-1] = e;	//在第i处放入e
	L->length++;		//长度加1
	return true;
}

int main() {
	SeqList L;
	InitList(&L);
	L.length = 5;		//测试
	ListInsert(&L, 1, 10);
	ListInsert(&L, 2, 20);
	ListInsert(&L, 3, 30);
	printf("%d\n",GetElem(L,2));		//查找数组里第二个数的数据是多少
	printf("%d\n",LocatedElem(L,20));	//查找数值为20的值在数据里是第几个数
	return 0;
}

